package top.jacktgq.string

/**
 @Author CandyWall
 @Date 2021/4/26--22:50
 @Description groovy中字符串的常用的几种定义方式
 */
def name1 = '单引号的字符串'
println name1.class

def name2 = "双引号的字符串"
println name2.class

def name3 = '''三引号的字符串'''
println name3
println name3.class

// 特殊字符转义
def name4 = 'hello "groovy"'
println name4
def name5 = 'hello \'groovy\''
println name5

def name6 = "hello 'groovy'"
println name6

def name7 = "hello \"groovy\""
println name7

// 三引号可以输出带格式的段落字符串，类似markdown中的代码块
def name8 =
'''\
你好

    groovy
    此致
敬礼
'''
println name8

// 双引号定义的字符串中可以使用占位符进行扩展，而单引号和三引号不可以
def name9 = "CandyWall"
def sayHello = "Hello ${name9}"
println sayHello
// 使用占位符的话，字符串的类型将不再是java.lang.String类型了
// 变成了org.codehaus.groovy.runtime.GStringImpl
println sayHello.class

// ${}中可以扩展任意表达式
def sum = "2 + 3 = ${2 + 3}"
println sum.class

// GString和String都继承了共同的父类CharSequence
// GString可以直接传入String类型的参数的方法中
String echo(String message) {
    return message
}

def result = echo(sum)
println result
println result.class